//
//  AsyncTaskManager.h
//  AsyncTaskTrigger
//
//  Created by zhouzuosong on 2020/9/17.
//

#import <Foundation/Foundation.h>
#import "AsyncTask.h"



@interface AsyncTaskManager : NSObject

+ (instancetype)shareManager;

#pragma mark - *****  手动Handler  *****
/// 添加串行任务 无回调 搭配 sendSemaphore 方法使用
/// @param actionBlock 任务内容
- (void)addSerialActionBlock:(LXTaskActionBlock)actionBlock;

/// 添加带回调串行任务任务 搭配 sendSemaphore 方法使用
/// @param actionBlock 任务内容
/// @param completBlock 任务完成回调
- (void)addSerialActionBlock:(LXTaskActionBlock)actionBlock completBlock:(LXTaskActionBlock)completBlock;

/// 添加并行任务 无回调 搭配 sendSemaphore 方法使用
/// @param actionBlock 任务内容
- (void)addConcurrentActionBlock:(LXTaskActionBlock)actionBlock;

/// 添加带回调的并行任务 搭配 sendSemaphore 方法使用
/// @param actionBlock 任务内容
/// @param completBlock 完成回调
- (void)addConcurrentActionBlock:(LXTaskActionBlock)actionBlock completBlock:(LXTaskActionBlock)completBlock;

#pragma mark - *****  Block Handler  *****

/// 添加串行任务 无回调
/// @param actionBlock 任务内容
- (void)addSerialHandlerActionBlock:(LXSemaphoreBlock)actionBlock;

/// 添加带回调串行任务任务
/// @param actionBlock 任务内容
/// @param completBlock 任务完成回调
- (void)addSerialHandlerActionBlock:(LXSemaphoreBlock)actionBlock completBlock:(LXTaskActionBlock)completBlock;

/// 添加并行任务 无回调
/// @param actionBlock 任务内容
- (void)addConcurrentHandlerActionBlock:(LXSemaphoreBlock)actionBlock;

/// 添加带回调的并行任务
/// @param actionBlock 任务内容
/// @param completBlock 完成回调
- (void)addConcurrentHandlerActionBlock:(LXSemaphoreBlock)actionBlock completBlock:(LXTaskActionBlock)completBlock;

#pragma mark - *****  执行任务  *****
/// 开启串行任务
/// @param completBlock 任务完成回调
- (void)startSerialActionWithCompletBlock:(LXTaskActionBlock)completBlock;

/// 开启并行任务
/// @param completBlock 任务完成回调
- (void)startConcurrentActionWithCompletBlock:(LXTaskActionBlock)completBlock;

/// 异步任务完成 发送信号量
- (void)sendSemaphore;

/// 是否正在工作中
- (BOOL)isWorking;

/// 暂停任务
- (void)suspendWork;

/// 继续任务
- (void)continueWork;

@end


